﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using HotelManagement.DTO;

namespace HotelManagement.DAO
{
    class Room_EquipmentDAO : DataProvider
    {
        public Room_EquipmentDAO()
            : base()
        {

        }

        public bool Insert(Room_EquipmentDTO unit)
        {
            string strInert = "insert into room_equipment(RoomID,EquipmentID,Available) values (";
            strInert += unit.RoomID + ",";
            strInert += unit.EquipmentID + ",";
            strInert += unit.Available + ")";

            return base._ExecuteQuery(strInert);
        }

        public bool Update(Room_EquipmentDTO unit)
        {
            string strUpdate = "update room_equipment set ";
            strUpdate += " room_equipment.Available = " + unit.Available;
            strUpdate += " where (room_equipment.RoomID = " + unit.RoomID + " AND room_equipment.EquipmentID = " + unit.EquipmentID + ")";
            return base._ExecuteQuery(strUpdate);
        }
        /*
    * select room.roomname,room_equipment.RoomID,equipment.equipmentName
from (room_equipment inner join equipment on
equipment.equipmentID=room_equipment.equipmentid) inner join room on room.roomid=room_equipment.roomid
where room_equipment.RoomID=1
    */
        public DataTable SelectEquipmentOfARoom(int roomID)
        {
            string strSelect = "select room_equipment.RoomID,room_equipment.equipmentid,";
            strSelect += "room_equipment.available,equipment.EquipmentName";
            strSelect += " from room_equipment inner join equipment on equipment.equipmentid=room_equipment.equipmentid";
            strSelect += " where room_equipment.RoomID = " + roomID;
            return base._Select(strSelect);
        }
        public DataTable SelectAvailableEquipentOfARoom(int pRoomID)
        {
            string strSelect = "select room_equipment.RoomID,room_equipment.equipmentid,equipment.EquipmentName";
            strSelect += " from room_equipment inner join equipment on equipment.equipmentid=room_equipment.equipmentid";
            strSelect += " where room_equipment.RoomID = " + pRoomID + " AND room_equipment.available=1 ";
            return base._Select(strSelect);
        }
        /*Hàm này thực hiện việc thêm hoặc là cập nhật lại các tiện nghi cho phòng
         * đọc lên các tiện nghi cho một phòng,kiểm tra xem đã có tiện nghi unit trong danh sách tiện nghi chưa,
         * nếu chưa có thì thêm tiện nghi đó vào đã
         * đọc tất cả tiện nghi của 1 phòng theo mã phòng và đưa vào một table
         * nếu không đọc được một tiện nghi nào của phòng thì thực hiện thêm mới tiện nghi vào phòng. Kết thúc hàm
         * Nếu tìm được thì duyệt qua tất cả các hàng của phòng
         * nếu có một tiện nghi nào đấy giống như tiện nghi đang xét thì thực hiện cập nhật lại
         */
        public bool InsertOrUpdate(Room_EquipmentDTO unit)
        {
            DataTable tbl1 = this.SelectEquipmentOfARoom(unit.RoomID);
            int i = 0;
            while (i<tbl1.Rows.Count && tbl1.Rows[i]["EquipmentID"].ToString()!=unit.EquipmentID.ToString())
            {
                i++;
            }
            if (i==tbl1.Rows.Count)
            {
                return this.Insert(unit);
            }
            DataTable tbl = this.SelectEquipmentOfARoom(unit.RoomID);
            foreach (DataRow row in tbl.Rows)
            {
                //System.Windows.Forms.MessageBox.Show(row["EquipmentID"].ToString());
                //System.Windows.Forms.MessageBox.Show(unit.EquipmentID.ToString());

                if (int.Parse(row["EquipmentID"].ToString()) == unit.EquipmentID)
                {
                    return this.Update(unit);
                }
            }
            return true;
        }
    }
}
